package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式---> ()->{}      【接口/抽象类---匿名内部类】
 *                             【集合遍历---匿名内部类】
 * Collection--->List：存在重复元素并且有序【保存数据结构一致】
 *                Set：存无序并且不重复【保存数据结构一致】
 *                Queue：队列结合业务
 *  Map---------  HashMap：键值对存键
 */
public class LambdaDemo {
    @Test
    public void testList(){
//List集合：保存元素
 List<String> list =new ArrayList<>();
 list.add("白洋淀");
        list.add("白洋淀");
        list.add("白洋淀");
        list.add("白洋淀");
        list.add("白洋淀");
        //集合3种遍历方式：普遍for、增强for、支持forEach方法
        for (String str:list){
            System.out.println("增强for："+str);

        }
        //支持forEach方法：遍历集合元素   Consumer  针对List集合接口
       //Consumer接口针对List、set\Queue集合提供接口：功能获取List集合元素
        //accept()  获取list集合的所有元素
        list.forEach(new Consumer<String>(){
            public void accept(String s) {
                System.out.println("consumer接口遍历方案："+s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer  匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s -> {System.out.println("Lambda遍历方案："+s);});

    }
@Test
public void testMap(){
        //创建Map集合：键值对
    Map<Integer,String>map=new HashMap<>();
    map.put(1,"唐山");
    map.put(1,"石家庄");
    map.put(1,"秦皇岛");
    map.put(1,"邯郸");
    //遍历集合：普通for、增强for、forEach(BiConSummer接口---匿名内部类)
    //键值对--->一组Each对象
    //BiConSummer接口---获取每组Entry对象--accept()获取Entry对象
    map.forEach(new BiConsumer<Integer, String>() {
        public void accept(Integer integer, String s) {
            System.out.println("键"+integer+"值"+s);
        }
    });
    //使用Lambda表达式
    map.forEach((i,s)->System.out.println("lambda值："+s));


}
/**
 * 作业：   1.使用Lambda表达式完成Thread线程创建
 *         2.使用Lambda表达式完成Runnable线程创建
 *         3.IO流--File类：ListFile（FileFilter接口）
 *         目标：【io包下的FilterAPI类】实现使用Lambda接口【5行代码】
 *         4.IO流----File类：listFile(FileFilter接口)【2行代码】
 *         目标：【io包下FilterAPI类】实现使用Lambda表达式完成
 *         5.集合：改成Lambda写法
 *         目标：【list包下ListAPI类下单元测试：testComparator】
 *         LambdaDemo类下----完成作业
 *                 @LambdaHomeWork1
 *                 @LambdaHomeWork2
 *                    .....
 */
@Test
public void LambdaHomeWork1(){
//1.使用Lambda表达式完成Thread线程创建
    //Thread类Java定义线程类--具备启动start---
    //Thread类封装Runnable类---线程run运行
    Thread t1=new Thread(()->{
        for (int i = 0; i < 1000; i++) {
            System.out.println("给我虚的呀~~~~");
        }
});
    t1.start();

}
@Test
    public void LambdaHomeWork2(){
    //1.创建Runnable接口--run()
    Runnable mr1=()->{
        for (int i = 0; i <1000 ; i++) {

        }
    };
    //2.创建Thread线程类--start()
    Thread t2=new Thread(mr1);
    //3.启动线程
    t2.start();
}
@Test
    public void LambdaHomeWork3(){
   // 3.IO流--File类：ListFile（FileFilter接口）
   //     目标：【io包下的FilterAPI类】实现使用Lambda接口【5行代码】
    File file=new File(".");
    File[] subs=file.listFiles((pathname)->{ return pathname.getName().startsWith("s");});
    for (File f:subs){
        System.out.println("遍历后过滤完成："+f);}
}

@Test
    public void LambdaHomeWork4(){
    //4.IO流----File类：listFile(FileFilter接口)【2行代码】
   //       目标：【io包下FilterAPI类】实现使用Lambda表达式完成
    for (File f:new File(".").listFiles((pathname)->{ return pathname.getName().startsWith("s");})){
        System.out.println("遍历后过滤完成："+f);}
}

@Test
    public void LambdaHomeWork5(){
  //  5.集合：改成Lambda写法
       //      目标：【list包下ListAPI类下单元测试：testComparator】
    List<String> list=new ArrayList<>();
    list.add("阿西吧");
    list.add("搜都寺内");
    list.add("呦西");

Comparator<String> com=(String o1, String o2)->{
    return o1.length()-o2.length();
};
    Collections.sort(list);
    System.out.println("排序后的集合："+list);
}
}



